package com.laolang.shop.common.core.util;

import org.slf4j.Logger;

/**
 * @author khlbat
 * @version 1.0
 * @date 2020/11/1 20:46
 */
public class LogUtil {

    private LogUtil() {
    }

    private static final int ORIGIN_STACK_INDEX = 2;

    // 模块名 类名 方法 行号 消息内容
    private static final String FORMAT = "[Business Log] [{}] [{}] [{}] ===> {}";

    /**
     * 获取当前文件名称
     */
    public static String getFileName() {
        return Thread.currentThread().getStackTrace()[ORIGIN_STACK_INDEX].getFileName();
    }

    /**
     * 获取当前类名称
     */
    public static String getClassName() {
        return Thread.currentThread().getStackTrace()[ORIGIN_STACK_INDEX].getClassName();
    }

    /**
     * 获取当前方法名称
     */
    public static String getMethodName() {
        return Thread.currentThread().getStackTrace()[ORIGIN_STACK_INDEX].getMethodName();
    }

    /**
     * 获取当前代码行号
     */
    public static int getLineNumber() {
        return Thread.currentThread().getStackTrace()[ORIGIN_STACK_INDEX].getLineNumber();
    }

    /**
     * info 信息
     *
     * @param logger     logger
     * @param moduleName 模块名
     * @param message    日志内容
     */
    public static void info(Logger logger, String moduleName, String message) {
        StackTraceElement ste = Thread.currentThread().getStackTrace()[ORIGIN_STACK_INDEX];
        logger.info(FORMAT, String.format("%-10s", moduleName), String.format("%-25s", ste.getMethodName()), ste.getLineNumber(), message);
    }


    /**
     * error 信息
     *
     * @param logger     logger
     * @param moduleName 模块名
     * @param message    日志内容
     */
    public static void error(Logger logger, String moduleName, String message) {
        StackTraceElement ste = Thread.currentThread().getStackTrace()[ORIGIN_STACK_INDEX];
        logger.error(FORMAT, moduleName, ste.getMethodName(), ste.getLineNumber(), message);
    }

    /**
     * warn 信息
     *
     * @param logger     logger
     * @param moduleName 模块名
     * @param message    日志内容
     */
    public static void warn(Logger logger, String moduleName, String message) {
        StackTraceElement ste = Thread.currentThread().getStackTrace()[ORIGIN_STACK_INDEX];
        logger.warn(FORMAT, moduleName, ste.getMethodName(), ste.getLineNumber(), message);
    }


}
